package com.bonc.ioc.demo.utils;

import org.springframework.util.CollectionUtils;

import java.util.List;

/**
 * * @description
 *
 * @author jin.xu
 * @date 12/12/20 7:39 PM
 * @change: 12/12/20 7:39 PM by jin.xu for init
 */
public class StringHelper {
    private static final int MAX_IN_ROW_NUM = 1000;

    public static String getWhereInValuesSql(String column, List<String> values) {
        return getWhereInValuesSql(column, values, MAX_IN_ROW_NUM);
    }

    private static String getWhereInValuesSql(String column, List<String> values, int num) {

        if (CollectionUtils.isEmpty(values)) {
            return null;
        }
        // 值的个数
        int valueSize = values.size();

        // sql语句
        StringBuilder sql = new StringBuilder();

        if(valueSize == 1)
        {
            sql.append(column).append(" = '");
            sql.append(values.get(0));
            sql.append("'");
        }
        else {
            // 批次数
            int batchSize = valueSize / num + (valueSize % num == 0 ? 0 : 1);

            if (batchSize > 1) {
                sql.append("(");
            }

            for (int i = 0; i < batchSize; i++) {
                if (i > 0) {
                    sql.append(") or ");
                }
                sql.append(column).append(" in (");
                for (int j = i * num; (j < (i + 1) * num) && j < valueSize; j++) {
                    if (j > i * num) {
                        sql.append(",");
                    }
                    sql.append("'").append(values.get(j)).append("'");
                }
            }
            sql.append(")");
            if (batchSize > 1) {
                sql.append(")");
            }
        }

        return sql.toString();
    }

    public static String getWhereInValuesSqlLong(String column, List<Long> values) {
        return getWhereInValuesSqlLong(column, values, MAX_IN_ROW_NUM);
    }

    private static String getWhereInValuesSqlLong(String column, List<Long> values, int num) {

        if (CollectionUtils.isEmpty(values)) {
            return null;
        }

        // sql语句
        StringBuilder sql = new StringBuilder();

        // 值的个数
        int valueSize = values.size();
        // 批次数
        int batchSize = valueSize / num + (valueSize % num == 0 ? 0 : 1);

        if(valueSize == 1)
        {
            sql.append(column).append(" = ");
            sql.append(values.get(0));
        }
        else {
            if (batchSize > 1) {
                sql.append("(");
            }

            for (int i = 0; i < batchSize; i++) {
                if (i > 0) {
                    sql.append(") or ");
                }
                sql.append(column).append(" in (");
                for (int j = i * num; (j < (i + 1) * num) && j < valueSize; j++) {
                    if (j > i * num) {
                        sql.append(",");
                    }
                    sql.append(values.get(j));
                }
            }
            sql.append(")");
            if (batchSize > 1) {
                sql.append(")");
            }
            // }
        }

        return sql.toString();
    }
}
